
package com.scs.application.modules.order.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.scs.application.core.model.CommonResult;
import com.scs.application.core.service.IBaseService;
import com.scs.application.modules.order.dto.CloseDeliveryDTO;
import com.scs.application.modules.order.dto.DeliveryDTO;
import com.scs.application.modules.order.entity.Delivery;
import com.scs.application.modules.order.entity.DeliveryZip;
import com.scs.application.modules.order.request.DeliveryQueryRequest;
import com.scs.application.modules.order.vo.DeliveryVO;
import com.scs.application.modules.order.vo.ExcelDeliveryVO;
import com.scs.application.modules.thirdparty.erp.request.DeliveryRequest;

import java.util.List;

/**
 * 发货单 service 接口
 *
 */
public interface DeliveryService extends IBaseService<Delivery> {

    List<Delivery> list(DeliveryQueryRequest request);

    IPage<Delivery> page(DeliveryQueryRequest request);

    /**
     * @param id delivery_id
     * @Description: 更新发货状态 0 ->  1
     * @return: boolean
     */
    Delivery delivery(String id);

    /**
     * @param entity 发货订单 bean
     * @Description: 保存发货单主表及明细
     * @return: boolean
     */
    boolean saveDeliverys(Delivery entity, String deliveriedId);


    IPage<Delivery> sendPage(DeliveryQueryRequest request);

    /**
     * @param id
     * @Description: 取消发货
     * @return: boolean
     */
    boolean cancelDelivery(String id);

    /**
     * 发货单作废 相应订单状态修改为已完成
     */
    void closeDelivery(CloseDeliveryDTO dto);

    /**
     * @param request
     * @Description: 所有发货单查询
     * @return: com.baomidou.mybatisplus.core.metadata.IPage
     */
    IPage allDeliveryPage(DeliveryQueryRequest request);

    /**
     * 院方接口 发货单查询
     *
     * @param code 发货单号
     * @return 发货单
     */
    DeliveryVO getDeliveryByCode(String code);

    /**
     * 院方接口 入库通知
     *
     * @param code 发货单号
     */
    void notifyByCode(String code);

    /**
     * 供方接口 发货单查询
     *
     * @param code       发货单号
     * @param hospitalId 医院id
     * @return
     */
    DeliveryVO getDeliveryForSupplier(String code, String hospitalId);


    /**
     * 获取发货单二维码字符串列表，2个明细行为一个二维码字符串
     *
     * @param deliveryId
     * @return
     */
    DeliveryZip getDeliveryItemQrCodeString(String deliveryId);

    /**
     * 接收供方接口发货单信息
     *
     * @param deliveryDTOS
     */
    void batchSave(List<DeliveryDTO> deliveryDTOS);

    /**
     * excel导出模板查询
     */
    IPage<ExcelDeliveryVO> pageExcel(DeliveryQueryRequest request);

    /**
     * excel导出查询
     */
    List<ExcelDeliveryVO> listExcel(DeliveryQueryRequest request);

    /**
     * erp 执行发货
     * @param request
     * @return
     */
    CommonResult sendDeliveryERP(DeliveryRequest request);
}
